#ifndef OBJC_NAME_H
#define OBJC_NAME_H

#include <limits.h>
#include "node.h"

#define OBJC_LOOKUP_CLASS_FUNC              "objc_lookup_class"
#define OBJC_LOOKUP_IMP_FUNC                "objc_lookup_imp"
#define OBJC_LOOKUP_IMP_INLINE_FUNC         "objc_lookup_imp_inline"
#define OBJC_LOOKUP_IMP_SUPER_FUNC          "objc_lookup_imp_super"
#define OBJC_LOOKUP_IMP_SUPER_INLINE_FUNC   "objc_lookup_imp_super_inline"
#define OBJC_DISPATCH_IMP_FUNC              "objc_dispatch_imp"
#define OBJC_DISPATCH_IMP_SUPER_FUNC        "objc_dispatch_imp_super"


#define OBJC_NOT_USED_SEL               ULONG_MAX

typedef void (*objc_sel_iter_f)(unsigned long, const char *, void *);

extern unsigned long objc_used_sel_num;

void objc_init_name();
char *objc_make_get_class_object_func_name(const char *);
char *objc_make_imp_name(int, const char *, const char *);
char *objc_make_init_func_name(const char *);
void objc_register_sel_name(const char *, BOOL, BOOL);
BOOL objc_is_sel_name_declared(const char *);
unsigned long objc_get_sel_num(const char *);
void objc_iter_sels(objc_sel_iter_f, void *);

#endif /* OBJC_NAME_H */
